home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turnbull China Bikeride
/
Turnbull China Bikeride - Disc 2.iso
/
STUTTGART
/
DEMOS
/
3D_DEMO_3
/
!Demo3
/
c
/
demo32
< prev
Wrap
Text File
|
1992-02-03
|
4KB
|
167 lines
/******************************************************************************
* *
* grp.c *
* *
******************************************************************************/
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <swis.h>
#include <os.h>
#include "GrpLib.h"
void SetMouseArea(int left, int bottom, int right, int top)
{
os_regset regs;
char blk[16];
int i=0;
blk[i++]=(char) 1; /* define mouse co-ordinate bounding box */
blk[i++]=(char) (left & 0xFF); blk[i++]=(char) ((left >>8) & 0xFF);
blk[i++]=(char) (bottom & 0xFF); blk[i++]=(char) ((bottom>>8) & 0xFF);
blk[i++]=(char) (right & 0xFF); blk[i++]=(char) ((right >>8) & 0xFF);
blk[i++]=(char) (top & 0xFF); blk[i++]=(char) ((top >>8) & 0xFF);
regs.r[0]=0x15; /* define pointer and mouse parameters */
regs.r[1]=(int)blk;
os_swi(OS_Word,®s);
}
void SetMousePos(int x, int y)
{
os_regset regs;
char blk[16];
int i=0;
blk[i++]=(char) 3; /* set mouse position */
blk[i++]=(char) (x & 0xFF); blk[i++]=(char) ((x>>8) & 0xFF);
blk[i++]=(char) (y & 0xFF); blk[i++]=(char) ((y>>8) & 0xFF);
regs.r[0]=0x15; /* define pointer and mouse parameters */
regs.r[1]=(int)blk;
os_swi(OS_Word,®s);
}
void ReadMouse(int *x, int *y, int *b)
{
os_regset regs;
os_swi(OS_Mouse,®s);
*x=regs.r[0];
*y=regs.r[1];
*b=regs.r[2];
}
int Inkey()
{
os_regset regs;
regs.r[0] = 129; /* kb read */
regs.r[1] = 0; /* wait time low byte */
regs.r[2] = 0; /* wait time high byte */
os_swi(OS_Byte,®s);
return( (regs.r[2]==0) ? regs.r[1] : 0);
}
int main()
{
int i;
int msx,msy,msbut,msorgx,msorgy;
int kbbut;
int stp=6;
int ra,rs,rt,x,y,z,v;
char *spr1,*spr2,*spr3;
Object *cvx1,*cvx2,*cvx3;
Object *sch1,*sch2,*sch3;
Object *ObjTab[4];
Object *obs;
int curobj;
Envi *envi;
InitGrp();
Change2DParm(0,0,319,255);
Change3DParm(2*80,2*64,2*320);
obs = MakeObj("", NULL,0);
cvx1 = MakeObj("<Demo3$Dir>.crayon1", CVX ,1);
cvx2 = MakeObj("<Demo3$Dir>.crayon2", CVX ,0);
sch1 = MakeObj("<Demo3$Dir>.plane1", SCH ,0);
sch2 = MakeObj("<Demo3$Dir>.plane2", SCH ,1);
sch3 = MakeObj("<Demo3$Dir>.sub8", SCH ,2);
ObjTab[0]=cvx1;
ObjTab[1]=sch1;
ObjTab[2]=sch2;
ObjTab[3]=sch3;
PlaceObj(obs,0,0,0,0,0,-2000);
for (i=0;i<4;i++) PlaceObj(ObjTab[i],0,0,0,0,0,0);
envi = MakeEnvi(1, 0, 0x50);
MkVec4(envi->DirecSrc[0], 128, 128, 128, 0);
MkVec4(envi->PonctSrc[0], 0, 200, 0, 100000);
SetMouseArea(0,0,1279,1023);
SetMousePos(640,512);
ReadMouse(&msorgx,&msorgy,&msbut);
v=0;
curobj=2;
while (1==1) {
PlotObj(envi,obs,ObjTab[curobj]);
ReadMouse(&msx,&msy,&msbut);
msx-=msorgx;
msy-=msorgy;
kbbut = Inkey();
ReadObjCoord(ObjTab[curobj], &ra,&rs,&rt, &x,&y,&z);
rt += (msx*stp);
rs += (msy*stp);
if (msbut==0x01<<2) ra+=stp;
if (msbut==0x01<<0) ra-=stp;
switch (kbbut) {
case '+' : v+=5; break;
case '-' : v-=5; break;
case 'S' : v =0;ra=0;rs=0;rt=0;
}
/*PlaceObj(ObjTab[curobj], ra,rs,rt, x,y,z); */
MoveObj(ObjTab[curobj], ra,rs/256,rt/64, v);
switch (kbbut) {
case '1': curobj=0;break;
case '2': curobj=1; break;
case '3': curobj=2; break;
case '4': curobj=3; break;
case ' ': return(0);
}
SwapView(0x80808080);
}
}